package com.xzc.jcip._3_.对象的共享.线程封闭.栈封闭;

import java.util.Collection;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 * 栈封闭
 * 注意引用在方法内被实例化，并且要保证其不被逸出
 * 这样就可以保证这个方法是无状态的，所有的局部变量都在栈中
 */
public class LoadTheArk {
    private LoadTheArk ark;

    public void load(AnimalPair animalPair) {

    }

    public void loadTheArk(Collection<Animal> candidates) {
        SortedSet<Animal> animals;
        int numPairs = 0;
        Animal candidate = null;

        //引用在方法内部被实例化，没有逸出
        animals = new TreeSet<>();
        animals.add((Animal) candidates);
        for (Animal a : animals) {
            if (candidate == null || !candidate.isPotentialMate(a))
                candidate = a;
            else {
                ark.load(new AnimalPair(candidate, a));
                ++numPairs;
                candidate = null;
            }
        }
    }

}
